package com.bdqn.common;

/**
 * BaseDao
 *
 * @author LILIBO
 * @since 2022-12-29
 */
public class BaseDao {

    /**
     * 直接new出来（饿汉式）；先不new出来，在使用的时候再new出来（懒汉式）
     */
    private static BaseDao baseDao = null;

    // ① 将构造函数私有化（外部不能创建该类的实例，只能在内部创建）
    private BaseDao() {
    }

    /**
     * 获取当前对象的实例
     *
     * @return
     */
    public static synchronized BaseDao getInstance() { // synchronized 同步方法
        // 饿汉式：先new出来，直接返回
        // return baseDao;

        // 懒汉式：先不new，需要使用的时候new出来
        /* if (baseDao == null) {
            baseDao = new BaseDao();
        } */

        // 静态内部类：在方法上可以不加synchronized关键字，由JVM类加载机制保证唯一性
        baseDao = SingleHelper.baseDao;
        return baseDao;
    }

    /**
     * 静态内部类：
     */
    private static class SingleHelper {
        private static final BaseDao baseDao = new BaseDao();
    }
}
